<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <div id="app"></div>
  <script src="../dist/vue.js"></script>
  <!-- <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script> -->
  <script>
    // 数组数据响应式更新原理
    const vm = new Vue({
      data: {
        arr: ["海贼王", "火影忍者", "名侦探柯南",[]],
        obj: { name: "张三" }
      },
      el: "#app",
      // 模板编译为虚拟dom的时候，从arr对象取值了 _v(_s(变量)) JSON.stringify() 
      // 所以对象会收集依赖
      template: `
        <div id="app">
            <ul>
                <li>{{arr[0]}}</li>
                <li>{{arr[1]}}</li>
                <li>{{arr[2]}}</li>
                <li>{{obj}}</li>
                <li>{{arr}}</li>
              </ul>
          </div>
      `
    })
    setTimeout(() => {
      // 这种修改方式无法监控
      vm.arr[1] += 1
      // 也不会刷新视图
      // vm.arr.length = 10;
      // 7个数组的变异方法可以监控到 因为我们重写了
      // 这里并没有改变 arr属性 只是改变了arr这个数组对象
      // arr数组对象自身并没有改变（没有变成新数组，地址没改变）
      vm.arr[3].push("12")
      // vm.obj.age = 22
      // vm.obj.__ob__.dep.notify()//$set原理
      console.log("1秒后更新。。。",vm.arr,vm.obj)
    }, 1000)
  </script>
</body>

</html>